Bar code symbologies are widely used for automated data collection. Bar code symbologies, such as U.P.C., Code 39, Interleaved 2 of 5, Code 93 and Code 93i, can be referred to as "linear symbologies" because data in a given symbol is decoded along one axis or direction. Symbologies such as linear symbologies encode "data characters" (i.e., human readable characters, and special function characters, such as start, stop or shift) as "symbol characters," which are generally parallel arrangements of alternating, multiple-width strips of lower reflectivity or "bars" separated by strips of higher reflectivity or "spaces." An "element" is a bar or space. Each unique pattern of bars and spaces within a predetermined width defines a particular symbol character, and thus a particular data character or characters. A given linear symbol encodes several data characters along its length as several groups of unique bar and space patterns.
As the data collection markets grew, symbologies required greater amounts of information to be encoded within a smaller area (i.e., greater "information density"). To increase the information density in linear symbologies, "multi-row" or "stacked" symbologies were developed, such as Co 49 and PDF41. Stacked symbologies generally employ several adjacent rows of multiple-width bars and spaces.
Linear and stacked symbologies are generally based on their "X dimension," which is the nominal width dimension of the narrow bars or spaces in the symbology. "Nominal" refers to the intended value for a specified parameter, regardless of printing errors, etc. For Code 93i, the X dimension represents the smallest width of a bar in a given symbol.
Assuming a reader encounters no difficulties, each symbol character analyzed in a symbol is converted into corresponding data to be used by the reader, the user, or other peripheral equipment. Unfortunately, data encoded under nearly all symbologies can result in errors when decoded by a reader. Errors are often caused by poor print quality in a symbol, poorly-designed reading equipment, and so forth. Some linear symbologies are designed to reduce such errors. For example, the ratio of widths between 1, 2, 3 and 4 wide "elements" (i.e., bars or spaces) in the Code 93i symbology is established so that known algorithms can distinguish between elements despite variations in the widths of the given elements.
To also reduce errors, certain symbologies include check characters. A check character is a character included within a symbol whose value is used to perform a mathematical check that determines whether the symbol has been decoded correctly. For example, each Code 93i symbol may have a pair of modulo 53 check characters that immediately precede the stop symbol character. The Code 93i check character "C" is calculated based on the modulo sum of the product of the symbol values, multiplied by a weighting sequence. The check character "K" is based on the modulo sum of the products of the symbol values and a different weighting sequence. A "symbol value" is a number representing a data character in a given symbology. For example, in the Code 93i symbology, the character "A" has a character value of "10."
Some symbologies improve upon the use of check characters by employing error correction characters. Error correction characters, as with check characters, are calculated mathematically from the other symbol characters in a symbol. Error correction characters are symbol characters in a symbol that are reserved for erasure correction, error correction, and/or error detection. An erasure is a missing, unscanned or undecodable symbol character; the symbol character's position is known, but not its value. An erasure can result from portions of a symbol having insufficient contrast, a symbol that falls outside a reader's field of view, or a portion of which is obliterated. An error is a misdecoded or mislocated symbol character; both the position and the value of the symbol character are unknown. An error can result from random spots or voids in a symbol when the symbol is printed.
For an error, the error correction characters allow a reader to use these characters in a symbol to locate and correct errors that have unknown values and locations. Two error correction characters are required to correct each error: one error correction character to locate the erroneous symbol character and the second error correction character to determine what value the erroneous symbol character should have been. For an erasure, the error correction characters allow a reader to use these characters to correct erroneous or missing symbol characters that have known locations. Consequently, only one error correction character is required to correct each erasure.
For error detection, the error correction characters allow a reader to use these characters in a symbol to detect the number of errors in the symbol that exceed the error correction capacity for the particular symbology. Error detection cannot correct the errors in the symbol, but can prevent a symbol from being decoded and producing erroneous data. Error correction characters can be reserved for error detection, and in most linear symbologies, such as Code 93i, these characters are referred to as check characters, as discussed above.
In the case of Code 93i, the error correction characters are algorithmically generated using standard Reed-Solomon error correction methods based on the data characters, the Special Features flag character, and the message length character, but excluding the start and stop characters and the five error correction characters. If a portion of the symbol contains errors or erasures (i.e., damage), the symbol may in some cases be decoded based on the error correction characters.
Many error correction algorithms perform computations roughly analogous with solving linear equations wherein with two equations and two unknowns, one can readily compute the two unknowns. As noted above, the error correction characters are computed using several equations with the symbol characters. Therefore, using the several equations that generated the error correction characters, and undamaged data and error correction characters, a reader may determine the values of the unknown symbol, and error correction characters having erasure damage by solving the equations (if the number of unknown characters does not exceed the number of equations). Consequently, if a few symbol characters are damaged, the remaining symbol characters and error correction characters can be used to correct the damaged symbol characters, or error correction characters may be corrected based on the remaining symbol characters. Overall, there is a tradeoff between damaged symbol and error correction characters and undamaged characters in a symbol that can be corrected under error correction algorithms.
The extent of any damage recoverable by the error correction characters depends upon the amount and type of damage suffered by the symbol. As a general rule, if the damage to the symbol is an erasure, e.g., a portion of the symbol is obscured or lost, standard readers can recover a number of symbol characters that is approximately equal to the number of remaining error correction characters in the symbol. An equation for the maximum erasure damage that can be corrected under known error correction algorithms can be represented as follows: EQU E&gt;N.sub.ERASE
where E is the total number of error correction characters remaining in the symbol and N.sub.ERASE is the total number of characters in the symbol lost due to erasure damage.
If the portion were not an erasure, but an error, the number of characters having errors must be equal to approximately half the number of the remaining error correction characters because the remaining error correction characters must determine both the location of the errors and the correct value for each error. An equation for the maximum error damage that can be corrected under known algorithms can be represented as: EQU 2(E)&gt;N.sub.ERROR
where N.sub.ERROR is the total number of characters of the symbol suffering from error damage. Given the necessity for conciseness if machine readable symbols, and the need for accuracy, a more efficient method of error correction is desirable.